{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Action2_Mobile_recommendation_system_for_visual_data_exploration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 11.8 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>behavior_type</th>\n",
       "      <th>user_geohash</th>\n",
       "      <th>item_category</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10001082</td>\n",
       "      <td>285259775</td>\n",
       "      <td>1</td>\n",
       "      <td>97lk14c</td>\n",
       "      <td>4076</td>\n",
       "      <td>2014-12-08 18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10001082</td>\n",
       "      <td>53616768</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9762</td>\n",
       "      <td>2014-12-02 15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10001082</td>\n",
       "      <td>151466952</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5232</td>\n",
       "      <td>2014-12-12 11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291022</th>\n",
       "      <td>65341491</td>\n",
       "      <td>259008790</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13164</td>\n",
       "      <td>2014-12-03 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291023</th>\n",
       "      <td>65341491</td>\n",
       "      <td>336404938</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13164</td>\n",
       "      <td>2014-12-03 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291024</th>\n",
       "      <td>65341491</td>\n",
       "      <td>52142024</td>\n",
       "      <td>1</td>\n",
       "      <td>95qhbsu</td>\n",
       "      <td>5201</td>\n",
       "      <td>2014-12-10 22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291025</th>\n",
       "      <td>65341491</td>\n",
       "      <td>250557965</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13164</td>\n",
       "      <td>2014-12-03 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291026</th>\n",
       "      <td>65341491</td>\n",
       "      <td>300315408</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1838</td>\n",
       "      <td>2014-11-29 08</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>23291027 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           user_id    item_id  behavior_type user_geohash  item_category  \\\n",
       "0         10001082  285259775              1      97lk14c           4076   \n",
       "1         10001082    4368907              1          NaN           5503   \n",
       "2         10001082    4368907              1          NaN           5503   \n",
       "3         10001082   53616768              1          NaN           9762   \n",
       "4         10001082  151466952              1          NaN           5232   \n",
       "...            ...        ...            ...          ...            ...   \n",
       "23291022  65341491  259008790              1          NaN          13164   \n",
       "23291023  65341491  336404938              1          NaN          13164   \n",
       "23291024  65341491   52142024              1      95qhbsu           5201   \n",
       "23291025  65341491  250557965              1          NaN          13164   \n",
       "23291026  65341491  300315408              1          NaN           1838   \n",
       "\n",
       "                   time  \n",
       "0         2014-12-08 18  \n",
       "1         2014-12-12 12  \n",
       "2         2014-12-12 12  \n",
       "3         2014-12-02 15  \n",
       "4         2014-12-12 11  \n",
       "...                 ...  \n",
       "23291022  2014-12-03 12  \n",
       "23291023  2014-12-03 12  \n",
       "23291024  2014-12-10 22  \n",
       "23291025  2014-12-03 12  \n",
       "23291026  2014-11-29 08  \n",
       "\n",
       "[23291027 rows x 6 columns]"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "# 数据加载\n",
    "import pandas as pd\n",
    "\n",
    "data = pd.read_csv('./fresh_comp_offline/tianchi_fresh_comp_train_user.csv')\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cvr=0.9985776926023916%\n"
     ]
    }
   ],
   "source": [
    "# 计算CVR\n",
    "count_all , count_4 = 0 , 0\n",
    "count_user = data['behavior_type'].value_counts()\n",
    "count_all = count_user[1] + count_user[2] + count_user[3] + count_user[4]\n",
    "count_4 = count_user[4]\n",
    "\n",
    "cvr = count_4 / count_all\n",
    "print('cvr={}%'.format(cvr * 100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "23291027"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count_all"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>behavior_type</th>\n",
       "      <th>user_geohash</th>\n",
       "      <th>item_category</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2014-12-08 18:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>285259775</td>\n",
       "      <td>1</td>\n",
       "      <td>97lk14c</td>\n",
       "      <td>4076</td>\n",
       "      <td>2014-12-08 18:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 12:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 12:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-02 15:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>53616768</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9762</td>\n",
       "      <td>2014-12-02 15:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 11:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>151466952</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5232</td>\n",
       "      <td>2014-12-12 11:00:00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      user_id    item_id  behavior_type user_geohash  \\\n",
       "time                                                                   \n",
       "2014-12-08 18:00:00  10001082  285259775              1      97lk14c   \n",
       "2014-12-12 12:00:00  10001082    4368907              1          NaN   \n",
       "2014-12-12 12:00:00  10001082    4368907              1          NaN   \n",
       "2014-12-02 15:00:00  10001082   53616768              1          NaN   \n",
       "2014-12-12 11:00:00  10001082  151466952              1          NaN   \n",
       "\n",
       "                     item_category                time  \n",
       "time                                                    \n",
       "2014-12-08 18:00:00           4076 2014-12-08 18:00:00  \n",
       "2014-12-12 12:00:00           5503 2014-12-12 12:00:00  \n",
       "2014-12-12 12:00:00           5503 2014-12-12 12:00:00  \n",
       "2014-12-02 15:00:00           9762 2014-12-02 15:00:00  \n",
       "2014-12-12 11:00:00           5232 2014-12-12 11:00:00  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将time字段设置为pandas中的datatimes\n",
    "data['time'] = pd.to_datetime(data['time'])\n",
    "data.index = data['time']\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [],
   "source": [
    "from collections import defaultdict\n",
    "from datetime import datetime,timedelta\n",
    "\n",
    "count_day = defaultdict(int)\n",
    "# 从2014-11-18遍历到2014-12-18\n",
    "str1 = '2014-11-17'\n",
    "temp_date = datetime.strptime(str1,'%Y-%m-%d') # 从字符串中解析出新的日期时间\n",
    "delta = timedelta(days=1)\n",
    "for i in range(31):\n",
    "    temp_date = temp_date + delta\n",
    "    # 将时间转换成字符串类型\n",
    "    temp_str = temp_date.strftime('%Y-%m-%d')\n",
    "    # data的index为时间\n",
    "    count_day[temp_str] += data[temp_str].shape[0]\n",
    "print(count_day)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>behavior_type</th>\n",
       "      <th>user_geohash</th>\n",
       "      <th>item_category</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2014-12-12 12:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 12:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 11:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>151466952</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5232</td>\n",
       "      <td>2014-12-12 11:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 12:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>290088061</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 12:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>298397524</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10894</td>\n",
       "      <td>2014-12-12 12:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 11:00:00</th>\n",
       "      <td>65341491</td>\n",
       "      <td>363795036</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4721</td>\n",
       "      <td>2014-12-12 11:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 06:00:00</th>\n",
       "      <td>65341491</td>\n",
       "      <td>322495684</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5522</td>\n",
       "      <td>2014-12-12 06:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 06:00:00</th>\n",
       "      <td>65341491</td>\n",
       "      <td>231236283</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10961</td>\n",
       "      <td>2014-12-12 06:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 06:00:00</th>\n",
       "      <td>65341491</td>\n",
       "      <td>167989332</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10961</td>\n",
       "      <td>2014-12-12 06:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 06:00:00</th>\n",
       "      <td>65341491</td>\n",
       "      <td>141457412</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10961</td>\n",
       "      <td>2014-12-12 06:00:00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1344980 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                      user_id    item_id  behavior_type user_geohash  \\\n",
       "time                                                                   \n",
       "2014-12-12 12:00:00  10001082    4368907              1          NaN   \n",
       "2014-12-12 12:00:00  10001082    4368907              1          NaN   \n",
       "2014-12-12 11:00:00  10001082  151466952              1          NaN   \n",
       "2014-12-12 12:00:00  10001082  290088061              1          NaN   \n",
       "2014-12-12 12:00:00  10001082  298397524              1          NaN   \n",
       "...                       ...        ...            ...          ...   \n",
       "2014-12-12 11:00:00  65341491  363795036              1          NaN   \n",
       "2014-12-12 06:00:00  65341491  322495684              1          NaN   \n",
       "2014-12-12 06:00:00  65341491  231236283              1          NaN   \n",
       "2014-12-12 06:00:00  65341491  167989332              1          NaN   \n",
       "2014-12-12 06:00:00  65341491  141457412              1          NaN   \n",
       "\n",
       "                     item_category                time  \n",
       "time                                                    \n",
       "2014-12-12 12:00:00           5503 2014-12-12 12:00:00  \n",
       "2014-12-12 12:00:00           5503 2014-12-12 12:00:00  \n",
       "2014-12-12 11:00:00           5232 2014-12-12 11:00:00  \n",
       "2014-12-12 12:00:00           5503 2014-12-12 12:00:00  \n",
       "2014-12-12 12:00:00          10894 2014-12-12 12:00:00  \n",
       "...                            ...                 ...  \n",
       "2014-12-12 11:00:00           4721 2014-12-12 11:00:00  \n",
       "2014-12-12 06:00:00           5522 2014-12-12 06:00:00  \n",
       "2014-12-12 06:00:00          10961 2014-12-12 06:00:00  \n",
       "2014-12-12 06:00:00          10961 2014-12-12 06:00:00  \n",
       "2014-12-12 06:00:00          10961 2014-12-12 06:00:00  \n",
       "\n",
       "[1344980 rows x 6 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['2014-12-12']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 时间规律统计，11月18日-12月18日 每天操作次数（双12左右猛涨）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBAAAAJ2CAYAAADmGHGNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABEXklEQVR4nO3de7htdV0v/vdHQEG2iqLu8lLkpTQlFXcqJ6WN5i3s4h0zDcvIrsfy1A+NsjqmVGppnSwSrMzkkKbWwcwUES09CqlRZpdjVGKomYqYpMj398cYGxaLtddY7L32Gt/FeL2eZz17rTnHnO/3us29xmeO8Z3VWgsAAADAem40dwEAAACgfwYIAAAAwCQDBAAAAGCSAQIAAAAwyQABAAAAmGSAAAAAAEwyQADgalV1UFXV3D2AflXVIVV16PW8zcEHqg8AW8cAAaBTVfXhqrrrqsueX1VfPb5/aFUdNHEfD6qqU69H7P9I8twVt//Oqvqlde7/gVV1+IqPb1JVZ1TVIWtse1xV/fAal59dVQ+7Hh25ARl/Xu6yge2qqm68znU3WePyd1XVbcb3T62qi6rqvPHtojW2v1lVvbuqvnz8+O1V9fC9Za76eHdV/fI6/X9o/J09t6qOrqofr6qbV9VvVtVx63/2a97fHarq3utcX1V1oP7OOy7JBdfzNhdV1YP2dmVV3XL89+7j9+HG6w0zq+ppe34mVn6eVfXsvWx/76q6w/XsDMAqBggAM6iq21TV+1e8vWyNzb44vq10aZKzq+qmSS5McmFVXTC+/VVVfWjV9jdLctsx8zur6qMrMv+xqs5c0enuSZ6a5CVV9eyq+t0kT0/y8Kr67fHt6BXbH57k7CR3GY9cOLi19l9JPpvk7uM2K3cC/ibJD1fVias6fmF8229V9eSqesX1uPxHqupfquqdq94uqKoPbOR+quqnq+oj49vTVl336qr6t6r60Bpvbc9O0758XlV1SlV9pqo+XVXP2qaf17dl+Jn7+ao6a9Xb2VX10hWb3yXJv67odNn4uX8kyUeSXFIrhlmjLyT53Ir3n91a291a2521f+a+JUlrrf1bVd0zyVckOXeN3pXk7VX1dSsufmyS1b9/Kx2c5NQkVyY5PMmJrbXLkjx47L9h447wHyQ5aPz4dlV1SVX93fg9uDjJaUk+X1X/MF52aVW9aNX9XK+fqxVum+Svr0ffL09yhyT/d53NXlZVz0jyiiRHj//++fhz++GqurKqnj7e302TfGuS303ygiQXVNV/jt//Pds8Y9XP7UFJXlOGCAD7xeFkAPM4KMkRrbWjqmp3kh+vqicmuWWSLyVpGXb+T6yq97TWzq2qn0ny4iTvaa39Z5J7rLzDqjoqyRtWfPzKJA9IcvOqemCS/5XkpePbF5N8Q5InjdveIckfJXlikiuS/GqSq5J8W5KvS/Kz42U7k+x55vaHk7wsw8DgxCQ/VMNhzYck2TXODW6S5DFJ/rW19smqelySX66q/91aa/v3Jby2qnrU+Dm+fiOXj76Q5MzW2s+sus1dMuycrHs/407mNyb5yiS3yzDQeWNr7WPjJldm2Gn97TX6tgzf6+v9eVXVsRm+d/dJcmiSd1fV2a21f91Gn9dXJHlRhp/Df1ljk2sdXdNa+4cMP397bv8zST7dWvuVNe77jkl2JblVkm+pqreNVz2/qk4Z31+r449m+DlPkudk+B18V13zRPhBSZ41/j6+OMlrq+q+GX6fnpzk0qr6/hX39/bW2n8ffy8+muH3+pZJdic5v4YjD3a01j489r7JOITbqxqebT8zycmttYvGr81Hk9x+xTZvzzBgeECS726t/b+x7z+s2OZ6/VxV1euTfE2GgczOJAdX1cqjEG6c5PDW2p2r6huSvCbJ5Rm+zjfL8KTVX634Wt4oyY4k3zh+b38yyfuT/HBr7S+S/MXY6TeS/H2Sn2qtXTJ+vv+Z5NFV9VWttX8at3t/hp/7L9ZwZNYPJPnmPWGttQur6uQkZ1bVI1prV633dQZgbQYIAPNYvfPypSSV4Y/qPX/Y7tnB3vMX99Mz7PzfatUf7knyzAzPYq7cKf/uJN+U5OFJfjzJtye5TYZnWU/IsBOyZ/uPJzkpyZcl+anx3/8at9+R5NgkX53kAVX13zPsQH5/kmdkOArh5a21Y6vqtCQ3aa39aFUd2Vr75MqSrbW/qqpv2uzhwehpSf5nhmcvN3J5Mnwe311V37Tq8kMz7PxM3c/dk1zQWvtShmfH/znD127ljvZ6pq7fW+5/JvmOFTueF2fY0d8zQOj686qqnUnelOQnMgwRDsuwc77n96KSfLi19viJnL35ygw7wrdN8rgkf9ta+8Ukv7hOp0dlGDp8fNwB3pXk2Um+srV26rjN1UON1trrazi94UkZdpDPaK39+Ir7+19J/m788MYZDvu/33i/f5vkPzL8Dt1o/H3+iiSfrap7t9Y+u87n9s1J/u+e4cGKvJ9P8rLW2keS3DHJ/8vwmPDl4/v3SvK6FTe5Xj9XrbVvX5H1rgyDlL9Yq2Br7c/H3D3bn5vkFa21V661fQ2nNvxakl9KclRV/XaGweVVSe6U5JNJ3jAOYn4mw6Dg+CSnVtX3JfneDI9Pe05x+e4kbx2/Fit7/VVVvSfJI5Ocs1YXANbnFAaAeVyV5Hbjs2YvT3JVa+2sJG9urZ3eWvutJJ9K8nuttbeOt7lyvN2OJO9sre1qre3KcCjxYasDWmtfzDggGN/f47Ak/7xq2y9kePbvxUl+Lsnx42Hez03yyvH9P8owqHh7hqMOfjnJ92XYSTqzqn40yZHj8OD2GQ4/vk+SVNUzq+qvq+qjGU6JeEdVXTjuOD0yyW/WcHj9RXXdUxw26nEZdjQ2evkeZ7bWHrjyLcMRFRu5nw8m+daq+vJxJ+jWGXYO95galGxkkHKd3NbaB1prf5MMh69n2GFcfUh5z5/Xx5M8vbX2h0luPP4c/2uS547vPybD0StXq6p/ruEw/Y/UcNrCjyX5mbrmlIZLquoT47P472ytPWHs/LQkT6rhtJ1/qaqHVdX/Gw+N/0wNp9kcluFn/9Ix7peTPCvXPYWoxqHKHj+c5LUZfg+eX1VPraozxuu+Jdc8u//5JB9OckmSdyT5dIbf7zsn+bXxcz43w2kN6w0PkmH497/XuPyvk/zpeJTJF1prn0ryj0m+uoan/e+ea69bsE8/V+PRSl+T5D0TPfdsf58MR5mst8N+QZKHJfmTJPdurZ3UWjsmw+DyfUmeOT7e3bO19pokf57hlJYfHDu+pLV201wzgHp7khfU2gs3/u8MX0MA9sGsRyCMz0C8prW210V1xu1+PcmftNb+eGuaARxwVyX5aGvt3jWcwvDMqrp5knOr6uGttb+duO2TajgtIUmOSvJ7Kzeoqq9P8lsZnnE+fHxG9bwMOwy3yHA4dTIe3TAeFv07GXaQ3ldVv17Dege3SrJjzDoyye+PO1Dvq6p/z3D++jdmOKT5xRkO4b4ww87Ka5P8flUdPR5m/ivjM4tXrXzcr6rfy3AEw3kb/eKtpbXWao011/Z2+WjD/w/u5X4+mGHH95wMz0K/cBzGXH2zJD9XVc/c290mSVW9Icn9V113ZmvtORP9k+Tnk/xma+1zKy7r4vOayLxw3MHbc8TNM5O8qqr+NMMaAZ+uYdHEK8fDze+a5It7jl6pqveN97VnSFUZjn75rxUfH5Lh63PrJK9M8vVj3seSvDDJ88aPvzfDTultxi6PaK39R1WdlOTp49EJleQDGX7m9zgywykJu1prn6nh3Pw9O7Ff11r79Pj+HZL8e4YjLn4uw2Du28d+9x23+YoMRwpMuW2Sf1t9YWvt1VV12wyH/r96vPjdGYZGf5fk71prn1+x/b78XCXDTvuftNaudZRJDQunXrVywDJ+f09P8oettf/YW9DY6/NV9StZcZpKhnUcDk3yl6u2/2SGU1NukuGokj0d35Hkq5K8LcPvwGVV9fjW2vtX3PzfMq4LA8D1N9sAoYYFln4nwx8J6233oCRfZngA3MBc5wiw1tplVfWCDDszPzZx+1e31p6ZJONO+er7em+Se9fwqgdf1lr7yar6jgw7KXfLsKBh5Zr/Bx44XnaX8TDh38twmPCDMzzb+LIMh5h/dMw8Msmfjducl+SNGXa+fi3Ds7evGj+Pw1bvaOSaHcYeHJHk5HEHcaWbZP2jFvY4Kck/tdYeNg5h/rSGNSveO17fkvx02/taAcNGrX3bPnRPVT0yw/fu3quuOiIdfF4T3jL2uXNVvTPDz88nMvw83TzDzvn5GXZYL1w5wKiq+2d4Vv9jVfXo1trrxsHCFeP1j8qwuN6XJTk5w+k4R2UYAHxzhlOBLs8wtLgqyRkZ1oZ4dZKs2tl9+Z5TGNbwnCT/1Vr7ifHjr82w7kBWDA+SYRD3oxnWErlRkj/OcHTDf0ty3vg30c3W28le4eMZBhLX+T621l4yHgl0n3GH/u0ZjnC6aYbfyQ3Z28/VeGTRD2VYsPJDGU5TuDzDEUk3zvA7/9YVN/nFDKdsHFnXXuC1knxFa+3qI6eq6iczfJ+uqmFdid9csf0fj8OOC1tr3zduf0iG0yuuSvLcqjq1tXbMmPODSR7fWnvGGp/e7TN8DQHYB3MegfClDIt1vSG5ekXd380wFb6otfaD438Ov5XkjVX1ba21N+z13gC2l4NyzSkMO3LN4eG/secZ1nWsdfrZ3p5KfESSb6jhXOY/yrBj+aYMh4h/TZKLk6S1dn6GRd0ek2FH4O4Z/pi/fYYdubuNnb+Q4ZnpT2dYpO29Sf4qwznSX6qqW2fFjs14GPV1y1Y9OcPRDAdiLYTr48uT/Nh4+sjVxsPAX76B2z8gw7P1aa1dNX4/d2X4uiTTpwqu+xTwujccFgp8eZJHr/EscfefV2vtQTW8TOlPt9aeMg4Rzm6tvbSGtRse0lq7zkvyjUcl7Dlf/qIkb6mq97Zrn+/+riQPynAKwT9nOPf/FmOvr8mwLshnMvys/2YbThm6YuIZ+dTwSiNXju9/ZZJHZdzJHv+OeViSv6+q3SuPqGnDAn4PzHCUw/3H/G9urX2+qv5w7HmdV3vYiz/N8PfTWq+m8bgM37fPJfml1toza1hA8rgk37mRO9/bz9V4RMfpSX6ntfZD42W/l+T/rPFzVhmO7nh6hqM9vrW19tcrrt+RFa88MQ4sHp3haKa/zPB9+esMj08XZHh52ZOS/MaKmOOTPKm19rTxPv5uxXXvSfKrVVVrPMacmOFrCMA+mG0NhNbaZa21z6y46OQkf91aOy7Jl9fw0khPzfAf4S8muV+t8frhANvUQRlPYcjwR/bByXBY8QZue0WSB9f48o0ZDoFefa52qmpXhnOsj86wIvk3ZfhD/M1JPjU+Q3rpqpsdlOGZ0idl+EP7GzK82sOJSR6f5IVV9bjW2pdaaz+V4Vnk+yb5iRrOmb5zVhyGPe4orPbfx8/50PU+yap6XA0vP7d7ve3200My7NTtq39K8sSqutfY80m59jnjUzvS+zRAGA/d/qMMO4lrnYu+XT6vPUcdJMPL8n3tOCA4PMMh7Ydc606HAdUfJ/lQa+3s8VSf5yZ5W1Xda892rbVPrjoC4BEZdkAPyTCs+5ckvzueV/9bEx2fXuNLnyb5QFXdcjwq4+UZ1mz47Pjx6eNlP5LkjKo6ZtX93C7DzvCbMjy7fuF4+R9m2MHf6JGW5yTZXdd+CclU1S0yLIr4PzL8TXWPGk5D2nOq07FTdzzxc/XCDEdS7O2lHVd6cIZhwLEZ1mGY8uYM36ObZjiyZCOPg4/OMMTcY+VtbpvhtI2HrrzB+DU7LhZQBNhnPb0Kw9ck+W/jHypHZHjW6z5JTm+tXTpOuX8+17y8EsB29l8Z/mhOhsO0r97Zq6pbZThE+chcezX7Q5LcqLX2Rxn+yL+WcQdqz7OjN81w2sH/14aXYHtShmHsjgyLu10wnp/8P6rq4621PYcL37i19rMr7vPEJPda/UzweHrZSzIcIv5nSc5K8isZj6AYD2M/JMmLquq81trvjzf9igw7lyesPB97L47I8H/DWkOI/VZVj05yabvmpQ/3XH5whs9r8qUIM7wM3n0zfA+/mGEV/HesuP6grL9WwL7+P/yIDM98f3ld87KEP9hae+02+7wOS3JcXftVRf4i15yjfuskP1JVh2d4mcT/meHlAX90z8attZdX1VUZhgjnZDhv/oMZXonhVhk+3yckOTXJd2VYg+DHM7yc6MMzvDzgnuHIjXLd4cd1TmGoqj07u6+q4SUvX5rk71trLxyvf3qSN1fVz2X42n0xw470WWP+Tyb5uvGIn1Mz7PSfXlXfterrfB2ttS9W1dOSvLqqnt5a+8txUPeGDK8E8cGxw8+Nl/1QhsUb/7iGV0n5jTVOK9pjzZ+rDKcp3D/DURPrvszk2PGtGU9lGI/q+KOqWrmGRmXF13lcN+Hfq+rHMgxZ9voE1/hzfEiGozh+ZLzsVrlmgHDrDKdU/VSSF1fVA1prl48DnZdnWKhyI69+AsBaWmuzviU5b/z3mUmeNr7/qAzPeD0zyQ+Mlz0lyS/P3debN2/eDvRbhh3n/5vktFWXX5ZhPYO1bvO4DC/B9rPjxw9N8qvj+7fL8Izrc5McPF72+xkO8/2HJHdccT+XrrrfpyR50Rp5OzL8AX/Q+PGvJvk/SQ4ZP/6DDKvOX5xk54rbPSrD696vvK+zkzx8L5/X7yX56gPwNb55hiMl7rvGdednOA3jRzch5/eTnLSX61qSW/m8rnP7H8rw7PzxKy47JsPaCA9e53ZfmeQXktxi/PiPx49vkmGBz68aL/+zDC/5d1CGV2g4csV9/FmSb1vx8fcm+YW95B0+/h78TZLvW+P6uyd5Z4aXT7xphoX9fnnP73CGUwresufnO8nuMf/wDX6dviLJXcb3D03yuBXXfV+GIy2OWXHZPTMMZ+63j9+XyjDs+MckHxrfPpbhFJEPZXgs+bcMp56svN0FSe656rIdSa5YddnrM7wyxQkZTpU5b423t2cYHu3OMCxJhtOrrshwhMQdxi53H687JckDx/fvkmHdhU37ffPmzZu3Jb5Va/Oefjo+M7V7fHbhFRmeHbksyXdk+CPkzAwr8h6S4T/HS2YrC9CpGhY+PKhd91z4PddfvTr9Acq/dZLL2rVX6t/f+7x9kqe21l6wWfe56v7X/JpU1Y3asOr/trTdP69x/YP/ahPPxPdiL+fZz2p8PEhr7Yq5u2xUVd0vyYdba/++we2v/nle9f7V61QAsPlmHyAAAAAA/ZttEUUAAABg+5hlEcVb3/rW7aijjtrn23/uc5/L4YcfvnmFtmGHufN76LD0/B46zJ3fQ4el5/fQYe78HjosPb+HDnPn99Bh6fk9dJg7v4cOS8/vocPc+T10uCHkX3jhhf/eWrvNda6YY+GF+973vm1/vO1tb9uv22+GuTvMnd9Dh6Xn99Bh7vweOiw9v4cOc+f30GHp+T10mDu/hw5Lz++hw9z5PXRYen4PHebO76HDDSE/yQVtjX35DZ3CUFU7q2pyMaNxu/dd//kGAAAA0LPJAUJV3TLJ72R4uaIpL8zwms4AAADADchGjkD4UpInZnhpxb2qqgcn+VySSzehFwAAANCRDb+MY1Wd11rbvZfrbpzkT5M8Osnr19quqk5OcnKS7Ny5875nnXXWPlZOLr/88uzYsWOfb78Z5u4wd34PHZae30OHufN76LD0/B46zJ3fQ4el5/fQYe78HjosPb+HDnPn99Bh6fk9dJg7f387VFUOP/zwHHTQQfuc31pLVe3z7ffX9cn/0pe+lM997nNZPRc4/vjjL2yt7VrzzjfyluS8da776SSPn9puz5tFFLd/fg8dlp7fQ4e583vosPT8HjrMnd9Dh6Xn99Bh7vweOiw9v4cOc+f30GHp+T10mDt/fzt8+MMfbp/4xCfaVVddtc/3cdlll+3zbTfDRvOvuuqq9olPfKJ9+MMfvs512Z9FFDfgm5L8YFWdl+TeVfXyTbpfAAAA2BJXXHFFjjzyyFmPINgqVZUjjzwyV1xxxYZvc/A+hHxtku9orZ2657LW2nErrj+vtfb063u/AAAAMLclDA/2uL6f64YHCG1c16C19sEkp05tBwAAANvZUaecs6n3d/FpJ2zq/W21zTqFAQAAAOjI+9///rz//e/ftPszQAAAAIAboM0eIFzvNRAAAACAzXfFFVfkpJNOykc+8pEcccQRedWrXpVnPOMZ+ehHP5o73OEOecUrXpHnP//52b17d3bv3p3f/u3fTpJcfPHF+eIXv5h3vOMd+fSnP503v/nNeclLXpLXve51SZJXvvKVeetb37rf/RyBAAAAAB04/fTTc6973SvvfOc789jHPjYveclLcs973jNvf/vbc9e73jVnnnnmXm/7j//4jzn//PPzLd/yLTn33HPzghe8IKecckpOOeWUTRkeJAYIAAAA0IUPfehDud/97pckOemkk/Jv//Zvuf/9758kecADHpC//du/vdb2n//8569+/6lPfWqS5I53vGO+8IUvHJB+BggAAADQgbvd7W5573vfmyR5/vOfn7vd7W5597vfnSR597vfnXvc4x658Y1vnE984hNJkje96U1X3/bwww+/zv0ddthh+c///M8kSWttv/tZAwEAAADWsC8vu/jZz342N7vZzfYp73u/93vzXd/1Xdm9e3eOPPLInHnmmXnGM56R4447Lne84x3znOc8J3//93+fH/iBH8hb3/rWHHnkkeve30Mf+tA84QlPyKte9aq84AUvyHHHHbdPvfYwQAAAAIAOHHbYYTn77LOvddmrX/3qa318z3veM+eff/5e7+PJT37y1QOMW93qVnnLW96yaf2cwgAAAABMMkAAAACA0WasFbBdXN/P1QABAAAAkhx66KH55Cc/uYghQmstn/zkJ3PooYdu+DbWQAAAAIAkd7jDHfKRj3zk6lc52BdXXHHF9dop32zXJ//QQw/NHe5whw3ftwECAAAAJDnkkEPyVV/1Vft1H+edd17uc5/7bFKjvvKdwgAAAABMMkAAAAAAJhkgAAAAAJOsgQAAAGwLR51yzrrXP+voK3PSOttcfNoJm10JFsURCAAAAMAkAwQAAABgkgECAAAAMMkAAQAAAJhkgAAAAABMMkAAAAAAJhkgAAAAAJMMEAAAAIBJBggAAADAJAMEAAAAYJIBAgAAADDJAAEAAACYZIAAAAAATDJAAAAAACYZIAAAAACTDBAAAACASQYIAAAAwCQDBAAAAGCSAQIAAAAwyQABAAAAmGSAAAAAAEwyQAAAAAAmGSAAAAAAkwwQAAAAgEkGCAAAAMAkAwQAAABgkgECAAAAMMkAAQAAAJhkgAAAAABMMkAAAAAAJhkgAAAAAJMMEAAAAIBJBggAAADAJAMEAAAAYJIBAgAAADDJAAEAAACYZIAAAAAATDJAAAAAACYZIAAAAACTDBAAAACASQYIAAAAwCQDBAAAAGCSAQIAAAAwyQABAAAAmGSAAAAAAEwyQAAAAAAmGSAAAAAAkwwQAAAAgEkGCAAAAMAkAwQAAABgkgECAAAAMMkAAQAAAJi0oQFCVe2sqnesc/0tqupP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\n",
      "text/plain": [
       "<Figure size 1296x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "# # Matplotlib图中文显示问题\n",
    "from pylab import *\n",
    "mpl.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.figure(figsize=(18,10))\n",
    "df_count_day = pd.DataFrame.from_dict(count_day,orient='index',columns=['count'])\n",
    "df_count_day['count'].plot(kind='bar')\n",
    "plt.legend(loc='best')\n",
    "plt.grid(True)\n",
    "plt.title('时间规律统计，11月18日-12月18日 每天操作次数（双12左右猛涨）')\n",
    "# plt.xlim([0,30])\n",
    "# plt.ylim([0,max(df_count_day['count'])])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    1344980\n",
       "Name: 2014-12-12, dtype: int64"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_count_day.loc['2014-12-12']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 时间规律统计，11月18日-12月18日 属于商品子集P的操作次数（双12左右猛涨）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 属于商品子集P的操作次数\n",
    "df_p = pd.read_csv('./fresh_comp_offline/tianchi_fresh_comp_train_item.csv')\n",
    "# 使用reset_index将原data的index还原\n",
    "df = pd.merge(data,df_p,on=['item_id']).set_index('time')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4279962, 7)"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>behavior_type</th>\n",
       "      <th>user_geohash</th>\n",
       "      <th>item_category</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2014-12-08 18:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>285259775</td>\n",
       "      <td>1</td>\n",
       "      <td>97lk14c</td>\n",
       "      <td>4076</td>\n",
       "      <td>2014-12-08 18:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 12:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 12:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-02 15:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>53616768</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9762</td>\n",
       "      <td>2014-12-02 15:00:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 11:00:00</th>\n",
       "      <td>10001082</td>\n",
       "      <td>151466952</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5232</td>\n",
       "      <td>2014-12-12 11:00:00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      user_id    item_id  behavior_type user_geohash  \\\n",
       "time                                                                   \n",
       "2014-12-08 18:00:00  10001082  285259775              1      97lk14c   \n",
       "2014-12-12 12:00:00  10001082    4368907              1          NaN   \n",
       "2014-12-12 12:00:00  10001082    4368907              1          NaN   \n",
       "2014-12-02 15:00:00  10001082   53616768              1          NaN   \n",
       "2014-12-12 11:00:00  10001082  151466952              1          NaN   \n",
       "\n",
       "                     item_category                time  \n",
       "time                                                    \n",
       "2014-12-08 18:00:00           4076 2014-12-08 18:00:00  \n",
       "2014-12-12 12:00:00           5503 2014-12-12 12:00:00  \n",
       "2014-12-12 12:00:00           5503 2014-12-12 12:00:00  \n",
       "2014-12-02 15:00:00           9762 2014-12-02 15:00:00  \n",
       "2014-12-12 11:00:00           5232 2014-12-12 11:00:00  "
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "def count_day_show(df,title=''):\n",
    "    count_day = defaultdict(int)\n",
    "# 从2014-11-18遍历到2014-12-18\n",
    "    str1 = '2014-11-17'\n",
    "    temp_date = datetime.strptime(str1,'%Y-%m-%d') # 从字符串中解析出新的日期时间\n",
    "    delta = timedelta(days=1)\n",
    "    for i in range(31):\n",
    "        temp_date = temp_date + delta\n",
    "        # 将时间转换成字符串类型\n",
    "        temp_str = temp_date.strftime('%Y-%m-%d')\n",
    "        # data的index为时间\n",
    "        count_day[temp_str] += df[temp_str].shape[0]\n",
    "    \n",
    "    plt.figure(figsize=(18,10))\n",
    "    df_count_day = pd.DataFrame.from_dict(count_day,orient='index',columns=['count'])\n",
    "    df_count_day['count'].plot(kind='bar')\n",
    "    plt.legend(loc='best')\n",
    "    plt.grid(True)\n",
    "    plt.title(title)\n",
    "    # plt.xlim([0,30])\n",
    "    # plt.ylim([0,max(df_count_day['count'])])\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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+VPoMPf8KXQYO38KHeaeP4UOY+dPocN6yL/yyiv/tbV27zucMfZBJ+7s6eEPf3jbF+973/v26fqrYewOY+dPocPc86fQYez8KXSYe/4UOoydP4UOc8+fQoex86fQYe75U+gwdv4UOsw9fwodxs6fQof1kJ/kiraLdXm7XQAAAACDMnwAAAAABmX4AAAAAAxqvzvgJAAAAEzNV77ylVx99dW56aab9vo2DjvssHz84x9fxVbD5R988ME5+uijc9BBB63o8oYPAAAAsI+uvvrq3OMe98gxxxyTqtqr27jhhhtyj3vcY5WbrX5+ay2f//znc/XVV+f+97//im7bbhcAAACwj2666aYceeSRez142J9UVY488sg7tZWH4QMAAACsgjkMHna6s/fVbhcAAACwyo4566JVvb3t5zxpVW9vrdnyAQAAALidD3/4w/nwhz+8ardn+AAAAADczmoPH+x2AQAAAPu5m266KWeccUauvvrqHH744fm93/u9PP/5z8+nP/3pHH300Tn//PPz8pe/PAsLC1lYWMgb3vCGJMn27dvzla98JZdeemm++MUv5t3vfnde85rX5K1vfWuS5I1vfGPe+9737nM/Wz4AAADAfu7cc8/Ncccdlw984AN52tOelte85jV56EMfmve///059thj8/rXv3631/37v//7XHLJJfmO7/iOXHzxxXnFK16Rs846K2edddaqDB4SwwcAAADY733iE5/IIx7xiCTJGWeckc985jP5lm/5liTJSSedlI9//OO3u/yNN95468/PfvazkyT3u9/98uUvf3mQfoYPAAAAsJ978IMfnL/6q79Kkrz85S/Pgx/84Fx++eVJkssvvzzf9E3flLve9a75f//v/yVJ3vWud9163UMOOeQOt7dhw4b827/9W5KktbbP/RzzAQAAAFbZ3nw15g033JB73OMee5X3Qz/0Q/n+7//+LCws5Mgjj8zrX//6PP/5z8+pp56a+93vfnnpS1+av/3bv80LXvCCvPe9782RRx657O099rGPzfd8z/fk937v9/KKV7wip5566l712snwAQAAAPZzGzZsyIUXXni7ZW9605tu9++HPvShueSSS3Z7G6effvqtw48jjjgi73nPe1atn90uAAAAgEEZPgAAAMAqWI1jI+wv7ux9NXwAAACAfXTwwQfn85///CwGEK21fP7zn8/B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\n",
      "text/plain": [
       "<Figure size 1296x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "count_day_show(df,'时间规律统计，11月18日-12月18日 属于商品子集P的操作次数（双12左右猛涨）')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>behavior_type</th>\n",
       "      <th>user_geohash</th>\n",
       "      <th>item_category_x</th>\n",
       "      <th>item_geohash</th>\n",
       "      <th>item_category_y</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2014-12-12 20:00:00</th>\n",
       "      <td>126536001</td>\n",
       "      <td>275221686</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 21:00:00</th>\n",
       "      <td>55469846</td>\n",
       "      <td>326973863</td>\n",
       "      <td>3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 21:00:00</th>\n",
       "      <td>55469846</td>\n",
       "      <td>326973863</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 21:00:00</th>\n",
       "      <td>55469846</td>\n",
       "      <td>326973863</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 21:00:00</th>\n",
       "      <td>55469846</td>\n",
       "      <td>326973863</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 00:00:00</th>\n",
       "      <td>65113833</td>\n",
       "      <td>287179638</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11376</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11376</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 00:00:00</th>\n",
       "      <td>65113833</td>\n",
       "      <td>287179638</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11376</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11376</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 00:00:00</th>\n",
       "      <td>65113833</td>\n",
       "      <td>370638941</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12553</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12553</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 00:00:00</th>\n",
       "      <td>65113833</td>\n",
       "      <td>370638941</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12553</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12553</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 18:00:00</th>\n",
       "      <td>65113833</td>\n",
       "      <td>302559938</td>\n",
       "      <td>1</td>\n",
       "      <td>94e1m17</td>\n",
       "      <td>2085</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2085</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>422308 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                       user_id    item_id  behavior_type user_geohash  \\\n",
       "time                                                                    \n",
       "2014-12-12 20:00:00  126536001  275221686              1          NaN   \n",
       "2014-12-12 21:00:00   55469846  326973863              3          NaN   \n",
       "2014-12-12 21:00:00   55469846  326973863              1          NaN   \n",
       "2014-12-12 21:00:00   55469846  326973863              1          NaN   \n",
       "2014-12-12 21:00:00   55469846  326973863              1          NaN   \n",
       "...                        ...        ...            ...          ...   \n",
       "2014-12-12 00:00:00   65113833  287179638              1          NaN   \n",
       "2014-12-12 00:00:00   65113833  287179638              1          NaN   \n",
       "2014-12-12 00:00:00   65113833  370638941              1          NaN   \n",
       "2014-12-12 00:00:00   65113833  370638941              1          NaN   \n",
       "2014-12-12 18:00:00   65113833  302559938              1      94e1m17   \n",
       "\n",
       "                     item_category_x item_geohash  item_category_y  \n",
       "time                                                                \n",
       "2014-12-12 20:00:00            10576          NaN            10576  \n",
       "2014-12-12 21:00:00            10576          NaN            10576  \n",
       "2014-12-12 21:00:00            10576          NaN            10576  \n",
       "2014-12-12 21:00:00            10576          NaN            10576  \n",
       "2014-12-12 21:00:00            10576          NaN            10576  \n",
       "...                              ...          ...              ...  \n",
       "2014-12-12 00:00:00            11376          NaN            11376  \n",
       "2014-12-12 00:00:00            11376          NaN            11376  \n",
       "2014-12-12 00:00:00            12553          NaN            12553  \n",
       "2014-12-12 00:00:00            12553          NaN            12553  \n",
       "2014-12-12 18:00:00             2085          NaN             2085  \n",
       "\n",
       "[422308 rows x 7 columns]"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['2014-12-12']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 时间规律统计，通过某一天的24小时的4个类别的操作情况（比如2014-12-12）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1296x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def count_hour_show(date1):\n",
    "    count_hour = {}\n",
    "    # 设置初始值\n",
    "    for i in range(24):\n",
    "        time_str = date1 + ' %02.d' % i\n",
    "#         print(time_str)\n",
    "        count_hour[time_str] = [0,0,0,0]\n",
    "        temp = df[time_str]['behavior_type'].value_counts()\n",
    "#         print(temp)\n",
    "        for j in range(len(temp)):\n",
    "            count_hour[time_str][temp.index[j]-1] += temp[temp.index[j]]\n",
    "#     print(count_hour)\n",
    "    \n",
    "    # 字典类型生成DataFrame\n",
    "    global df_count_hour\n",
    "    df_count_hour = pd.DataFrame.from_dict(count_hour,orient='index')\n",
    "    df_count_hour.plot(kind='bar',figsize=(18,10))\n",
    "    plt.legend(loc = 'best')\n",
    "    plt.title('时间规律统计，通过某一天的24小时的4个类别的操作情况（比如2014-12-12）')\n",
    "    plt.grid(True)\n",
    "    plt.show()\n",
    "count_hour_show('2014-12-12')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2014-12-12 00</th>\n",
       "      <td>29817</td>\n",
       "      <td>336</td>\n",
       "      <td>285</td>\n",
       "      <td>758</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 01</th>\n",
       "      <td>8736</td>\n",
       "      <td>101</td>\n",
       "      <td>288</td>\n",
       "      <td>75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 02</th>\n",
       "      <td>13356</td>\n",
       "      <td>24</td>\n",
       "      <td>196</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 03</th>\n",
       "      <td>4530</td>\n",
       "      <td>14</td>\n",
       "      <td>42</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014-12-12 04</th>\n",
       "      <td>4280</td>\n",
       "      <td>11</td>\n",
       "      <td>42</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   0    1    2    3\n",
       "2014-12-12 00  29817  336  285  758\n",
       "2014-12-12 01   8736  101  288   75\n",
       "2014-12-12 02  13356   24  196   22\n",
       "2014-12-12 03   4530   14   42   27\n",
       "2014-12-12 04   4280   11   42   10"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_count_hour.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 大数据读取练习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [],
   "source": [
    "# chunksize和gc练习\n",
    "import gc\n",
    "def get_df(file_path):\n",
    "    mylist = []\n",
    "    for chunk in pd.read_csv(file_path,chunksize=2000000):\n",
    "        mylist.append(chunk)\n",
    "    temp_df = pd.concat(mylist,axis=0)\n",
    "    del mylist\n",
    "    gc.collect()\n",
    "    return temp_df\n",
    "#     return mylist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Wall time: 13.9 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>behavior_type</th>\n",
       "      <th>user_geohash</th>\n",
       "      <th>item_category</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10001082</td>\n",
       "      <td>285259775</td>\n",
       "      <td>1</td>\n",
       "      <td>97lk14c</td>\n",
       "      <td>4076</td>\n",
       "      <td>2014-12-08 18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10001082</td>\n",
       "      <td>53616768</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9762</td>\n",
       "      <td>2014-12-02 15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10001082</td>\n",
       "      <td>151466952</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5232</td>\n",
       "      <td>2014-12-12 11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291022</th>\n",
       "      <td>65341491</td>\n",
       "      <td>259008790</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13164</td>\n",
       "      <td>2014-12-03 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291023</th>\n",
       "      <td>65341491</td>\n",
       "      <td>336404938</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13164</td>\n",
       "      <td>2014-12-03 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291024</th>\n",
       "      <td>65341491</td>\n",
       "      <td>52142024</td>\n",
       "      <td>1</td>\n",
       "      <td>95qhbsu</td>\n",
       "      <td>5201</td>\n",
       "      <td>2014-12-10 22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291025</th>\n",
       "      <td>65341491</td>\n",
       "      <td>250557965</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13164</td>\n",
       "      <td>2014-12-03 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23291026</th>\n",
       "      <td>65341491</td>\n",
       "      <td>300315408</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1838</td>\n",
       "      <td>2014-11-29 08</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>23291027 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           user_id    item_id  behavior_type user_geohash  item_category  \\\n",
       "0         10001082  285259775              1      97lk14c           4076   \n",
       "1         10001082    4368907              1          NaN           5503   \n",
       "2         10001082    4368907              1          NaN           5503   \n",
       "3         10001082   53616768              1          NaN           9762   \n",
       "4         10001082  151466952              1          NaN           5232   \n",
       "...            ...        ...            ...          ...            ...   \n",
       "23291022  65341491  259008790              1          NaN          13164   \n",
       "23291023  65341491  336404938              1          NaN          13164   \n",
       "23291024  65341491   52142024              1      95qhbsu           5201   \n",
       "23291025  65341491  250557965              1          NaN          13164   \n",
       "23291026  65341491  300315408              1          NaN           1838   \n",
       "\n",
       "                   time  \n",
       "0         2014-12-08 18  \n",
       "1         2014-12-12 12  \n",
       "2         2014-12-12 12  \n",
       "3         2014-12-02 15  \n",
       "4         2014-12-12 11  \n",
       "...                 ...  \n",
       "23291022  2014-12-03 12  \n",
       "23291023  2014-12-03 12  \n",
       "23291024  2014-12-10 22  \n",
       "23291025  2014-12-03 12  \n",
       "23291026  2014-11-29 08  \n",
       "\n",
       "[23291027 rows x 6 columns]"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "file_path = './fresh_comp_offline/tianchi_fresh_comp_train_user.csv'\n",
    "df = get_df(file_path)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.8.0 64-bit ('Bi_env': venv)",
   "language": "python",
   "name": "python38064bitbienvvenvba07af95a1bb4b078aa8134bba84dff2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.0"
  },
  "toc-autonumbering": false
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
